package cn.wolfcode.crm.web.interceptor;

/**
 * 权限拦截器
 */
/*public class PermissionInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //从Session中获取 员工对象
        Employee employee = UserContext.getCurrentUser();
//      Employee employee1 = (Employee) request.getSession().getAttribute("EMPLOYEE_IN_SESSION");

        //判断是否是超管 是就直接放行
        if (employee.isAdmin()) {
            return true;
        }

        //获取当前执行的handler方法 (强转成HandlerMethod)
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        //判断该方法有没有贴注解 没有就直接放行
        RequiredPermisson annotation = handlerMethod.getMethodAnnotation(RequiredPermisson.class);
        if (annotation == null) {
            return true;
        }

        //从session中获取当前的登录用户 拥有的权限(在登录时就查询出来放在Session中了)
        List<String> expressions = UserContext.getExpressions();
//      List<String> expressions1 = (List<String>) request.getSession().getAttribute("PERMISSION_IN_SESSION");

        //利用handlerMethod拼接出权限的表达式
        //权限表达式 controller的名称 去掉controller字符串 首字母小写 与方法名称拼接起来

      *//*  String simpleName = handlerMethod.getBean().getClass().getSimpleName();//DepartmentController
        simpleName = simpleName.replace("Controller", "");//Department
        simpleName = StringUtils.uncapitalize(simpleName);//把首字母转小写 department
        String methodName = handlerMethod.getMethod().getName();//获取 方法名 list
        String expression = simpleName + ":" + methodName;//拼接起来 设置表达式*//*

        //使用工具类 传进的是反射用的method 不是handlerMethod 是handlerMethod里面包含的method参数
        String expression = PermissionUtil.handlerExpression(handlerMethod.getMethod());

        //判断当前方法的权限表达式 是否包含在用户的权限表达式集合中 如果存在就放行
        if (expressions.contains(expression)) {
            return true;
        }
        //最后 若上面的都不符合 跳转到错误提示页面 不放行
        //使用请求转发 因为是WEB-INF内部资源
        request.getRequestDispatcher("/WEB-INF/views/common/nopermission.jsp").forward(request, response);
        return false;
    }
}*/
